package com.fileupload.server;

/**
 * 协议类型枚举
 * 定义服务器连接的各种协议类型，避免硬编码数字
 */
public enum ProtocolType {
    /**
     * FTP协议
     */
    FTP(1, "FTP"),
    
    /**
     * SFTP协议
     */
    SFTP(2, "SFTP"),
    
    /**
     * FTPS协议
     */
    FTPS(3, "FTPS");
    
    private final Integer code;
    private final String name;
    
    /**
     * 构造函数
     * @param code 协议代码
     * @param name 协议名称
     */
    ProtocolType(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
    
    /**
     * 获取协议代码
     * @return 协议代码
     */
    public Integer getCode() {
        return code;
    }
    
    /**
     * 获取协议名称
     * @return 协议名称
     */
    public String getName() {
        return name;
    }
    
    /**
     * 根据协议代码获取对应的枚举实例
     * @param code 协议代码
     * @return 对应的枚举实例，如果没有匹配的则返回默认的FTP
     */
    public static ProtocolType fromCode(Integer code) {
        if (code == null) {
            return FTP; // 默认返回FTP
        }
        
        for (ProtocolType type : ProtocolType.values()) {
            if (type.code.equals(code)) {
                return type;
            }
        }
        return FTP; // 默认返回FTP
    }
    
    /**
     * 根据协议名称获取对应的枚举实例
     * @param name 协议名称
     * @return 对应的枚举实例，如果没有匹配的则返回默认的FTP
     */
    public static ProtocolType fromName(String name) {
        if (name == null || name.isEmpty()) {
            return FTP; // 默认返回FTP
        }
        
        for (ProtocolType type : ProtocolType.values()) {
            if (type.name.equalsIgnoreCase(name)) {
                return type;
            }
        }
        return FTP; // 默认返回FTP
    }
}